var config = require('../config');


/**
 * 域模型基类 这里封装了一系列的 mysql 操作行为
 *
 * 充血模型设计
 *
 */
class Base {

    findOne(id) {
        let sql = `select * from ${this.tableName} where id = ?`;
        let params = [id];
        return this.execute(sql, params);
    }

    /**
     * 执行sql 并且返回 promise 对象
     * @param sql
     * @param sqlParams
     * @returns {Promise}
     */
    execute(sql, sqlParams) {
        let queryParams = [sql, sqlParams];// 代表pool.query(sql,values,cb) 三个参数，如有疑问可以查看一下 pool.query的源代码
        let p = new Promise((resolve, reject) => {
            queryParams.push((err, rows) => {
                if (err) {
                    console.log(err);
                    reject(err);
                } else {
                    resolve(rows);
                }
            });
            // apply 这里是利用反射 调用 pool.query(sql,values,cb)
            config.mysqlPool.query.apply(config.mysqlPool, queryParams);
        });

        return p;
    }
}


module.exports = Base;